Ú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
- sql-server-helper.com/sql-server-2008/…
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ágx
, a szélesség pedigy
.
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.