Olen uusi SQL Server 2008: ssa ja toivon, että ymmärrät kysymykseni / tarve.
Minulla on siis taulukko, joka sisältää 3 kenttää (Nimi, Leveys ja Pitkä) tietokannassani (spatiaalinen). Haluan luoda geometria / maantiede -sarakkeen näiden kenttien (Lat ja Pitkä), mutta valitettavasti ilman menestystä.
Kysymykseni kuuluu: Kuinka voin tehdä sen?
Kommentit
- sql-server-helper.com/sql-server-2008/…
vastaus
Voit lisätä tällaisen lasketun sarakkeen
alter table yourTable add geographyColumn as geography::STGeomFromText("POINT("+convert(varchar(20),Long)+" "+convert(varchar(20),Lat)+")",4326)
Olen lisännyt muunnoksen lng: stä tai latista, koska tallennan Long ja Lats numeroina.
Kommentit
- Kiitos vastauksistasi, onnistuin ratkaista ongelmani tällä rivillä: PÄIVITÄ tietokanta SET geometry_column = geometry :: P voit ([ColX], [ColY], SRID)
- Onko mahdollista luoda liipaisin tälle? Kuten kun täytät kentät (sarakkeet X ja Y) tiedoilla, joita yllä mainittu komentosarja suorittaa.
Vastaa
Näyttää siltä, että haluat STGeomFromText()
tai STPointFromText()
SQL-menetelmä:
DECLARE @g geography; SET @g = geography::STGeomFromText("POINT(-122.34900 47.65100)", 4326); SELECT @g.ToString();
tai
DECLARE @g geography; SET @g = geography::STPointFromText("POINT(-122.34900 47.65100)", 4326); SELECT @g.ToString();
Luo Geometry
tai Geography
-kenttä ja täytä sitten kenttä SQL: llä käyttämällä lat / lon -arvojasi.
Kommentit
- Mitä eroa olisi seuraavan menetelmän käyttämisessä …
DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
- @awesomo – Kyllä, voit käyttää sitä, jos haluat.
Vastaa
SQL Server 2012
Voit tehdä sen näin,
SELECT geography::Point(lat, long, 4326)
Lisätietoja on tietokannan järjestelmänvalvojien viestissä, ”SQL Server Pistekonstruktori tai ST_Point (x, y) -versio? ”
Kommentit
- Jos
Point
vie argumentteja x, y, joten sinun on vaihdettava tilauksesi sellaisenaan:geography::Point(long, lat, 4326)
. Pituusaste onx
ja leveysaste ony
.
Vastaa
Jos alkuperäisten Long / Lat-arvojen pyöristys esiintyy käytettäessä lauseketta CONVERT(VARCHAR,
.
Kokeile:
GeoData = geometry:: STGeomFromText("POINT(" + CAST(CAST(X AS decimal(13, 2)) AS varchar) + " " + CAST(CAST(Y AS decimal(13, 2)) AS varchar) + ")", 4326)
Kommentit
- Minua pelkää tämän menetelmän käyttö, koska siihen liittyy sijaintitarkkuuden menetys.