Google Maps e MSSQL sembrano essere d'accordo sul modo di calcolare la distanza/lunghezza di una polilinea/linee che usando SRID 4326.Google Maps e lunghezza LINESTRING SQL Server incoerente
MSSQL:
SELECT geography::STGeomFromText('LINESTRING(-98.78 39.63,2.98 27.52)', 4326).STLength()
Risultato: 9030715.95721209
allora Google Maps:
http://jsbin.com/niratiyojo/1/
Risultato: 9022896.239500616
In un primo momento ho pensato che fosse solo un diverso raggio di misura terra, così ho suonato in giro con questo e si è rivelato essere più.
Ho bisogno della mia interfaccia JavaScript per abbinare ciò che MSSQL segnalerebbe per rimanere coerente e preciso. Dove o come posso trovare come MSSQL calcola il loro STLength()
e può essere replicato in JavaScript?
Aggiornamento:
ho capito se faccio
SELECT GEOGRAPHY::STGeomFromText('LINESTRING(-98.78 39.63,2.98 27.52)', 104001).STLength() * 6378137
Poi MSSQL restituisce 9022896.23950062
La nuova SRID in MSSQL:
Nuovo “Unità Sphere” Spatial Reference ID Il riferimento spaziale predefinito ID (SRID) in SQL Server 2012 è 432 6, che utilizza il sistema metrico come unità di misura. Questo SRID rappresenta anche la vera forma a sfera ellissoidale della terra . Sebbene questa rappresentazione sia la più accurata, è anche più complessa calcolare la matematica ellissoidale . SQL Server 2012 offre un compromesso in termini di velocità e precisione , aggiungendo un nuovo riferimento spaziale id (SRID), 104001, che utilizza una sfera di raggio 1 per rappresentare una terra perfettamente rotonda.
Quindi il problema è che Google Maps non utilizza una vera sfera ellissoidale nei calcoli. Sto cercando una funzione javascript che ottenga 9030715.95721209
come testimoniato.
ho cercato formula diretta Vincenty qui: http://jsbin.com/noveqoqepa/1/edit?html,js,console e mentre è più vicino non riesco ancora a corrispondere MSSQL
Edit 2:
sono stato in grado di trovare le misure che usa:
SridList._sridList.Add(4326, new SridInfo(4326, "EPSG", 4326, "GEOGCS[\"WGS 84\", DATUM[\"World Geodetic System 1984\", ELLIPSOID[\"WGS 84\", 6378137, 298.257223563]], PRIMEM[\"Greenwich\", 0], UNIT[\"Degree\", 0.0174532925199433]]", "metre", 1.0, 6378137.0,
6356752.314));
ma collegare apparentemente quelli in Vincenty non porta fortuna.
L'unica cosa che ho potuto scoprire è che l'asse semi-secondario tende ad essere espresso in altre due cifre decimali, che ha esattamente un'influenza zero sul risultato complessivo. Sinceramente non ho idea di come MSSQL determini la sua distanza. –
Utilizzando il modulo sotto [Esempi live sulle soluzioni Vincenty di geodetiche nella pagina ellissoide] (http://movable-type.co.uk/scripts/latlong-vincenty.html) ottengo 9.030.706.728 m, che è abbastanza vicino a 9030715.95721209 (9 metri su 9x10^9 metri) – geocodezip
Sì, anche questa è la stessa distanza che ho ottenuto usando la soluzione jsbin che ho postato in fondo al mio post. È molto vicino, ma ho bisogno che sia più preciso. – ParoX