Új vagyok az SQL Server 2008-ban, és remélem, meg fogja érteni a kérdésemet / szükség.

Így van egy táblázatom, amely 3 mezőt tartalmaz (név, lat és hosszú) az adatbázisomban (térbeli). Geometria / földrajz oszlopot szeretnék létrehozni ezek alapján (lat és Hosszú), de sajnos sikertelenül.

A kérdésem az: Hogyan tudnám ezt megtenni?

Megjegyzések

Válasz

Hozzáadhat ehhez hasonló számított oszlopot

alter table yourTable add geographyColumn as geography::STGeomFromText("POINT("+convert(varchar(20),Long)+" "+convert(varchar(20),Lat)+")",4326) 

Az konverziót lng vagy lat értékből adtam hozzá, mert a Hosszú és a Latt számként tárolom.

Megjegyzések

  • Köszönöm a válaszokat, sikerült hogy megoldjam a problémámat ezzel a sorral: UPDATE yourdatabase SET geometry_column = geometry :: P ken ([ColX], [ColY], SRID)
  • Lehetséges létrehozni ennek kiváltó okát? Mint amikor a mezőket (X és Y oszlop) feltölti olyan információkkal, amelyeket a fent említett szkript fog futtatni.

Válasz

Úgy tűnik, hogy a STGeomFromText() vagy STPointFromText() SQL módszer:

DECLARE @g geography; SET @g = geography::STGeomFromText("POINT(-122.34900 47.65100)", 4326); SELECT @g.ToString(); 

vagy

DECLARE @g geography; SET @g = geography::STPointFromText("POINT(-122.34900 47.65100)", 4326); SELECT @g.ToString(); 

Hozza létre a Geometry vagy Geography mezőt, majd az SQL segítségével töltse fel ezt a mezőt a lat / lon értékeivel. / p>

Megjegyzések

  • Mi lenne a különbség a következő módszer használatában … DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
  • @awesomo – Igen, használhatod, ha akarod.

Válasz

SQL Server 2012

Megteheti így,

SELECT geography::Point(lat, long, 4326) 

További információkért lásd az Adatbázis-adminisztrátorok bejegyzésemet, “SQL Server Pontszerkesztő vagy az ST_Point (x, y) verziója? “

Megjegyzések

  • Ha a Point x, y argumentumokat vesz fel, akkor a sorrendet úgy kell megváltoztatnia: geography::Point(long, lat, 4326). A hosszúság x, a szélesség pedig y.

Válasz

Ha az eredeti Long / Lat értékek kerekítése történik a CONVERT(VARCHAR, utasítás használatakor.

Próbálja ki:

GeoData = geometry:: STGeomFromText("POINT(" + CAST(CAST(X AS decimal(13, 2)) AS varchar) + " " + CAST(CAST(Y AS decimal(13, 2)) AS varchar) + ")", 4326) 

Megjegyzések

  • Félelmem van ennek a módszernek a használatában, mivel a hely pontosságának elvesztésével jár.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük