Red de conocimiento informático - Material del sitio web - Cómo realizar una consulta de PDI basada en las coordenadas de Mercator y calcular la distancia entre dos puntos

Cómo realizar una consulta de PDI basada en las coordenadas de Mercator y calcular la distancia entre dos puntos

Clase Mercator Projection (MercatorProjection), obtenga la instancia a través del método getProjection de MapType. Referencia de clase:

La longitud y latitud de Baidu se convierten a coordenadas de Mercator (worldCoordinate.x y worldCoordinate.y son xey en coordenadas planas)

var proyecciones1 = map.getMapType() .getProjection();

var worldCoordinate = proyecciones1.lngLatToPoint(pt);

mokato se convierte a longitud y latitud de Baidu (LngLat.lng y LngLat.lat son latitud y longitud)

var proyecciones2 = map.getMapType().getProjection();

var LngLat = proyecciones2.pointToLngLat(mctXY);

2. Utilice coordenadas para invertir. codificación geográfica

Porque Baidu Map API solo admite la longitud y latitud de Baidu para la resolución de direcciones inversas. Por lo tanto, primero debe convertir las coordenadas de Mokato a latitud y longitud de Baidu y luego utilizar el siguiente método.

var gc = new BMap.Geocoder();

gc.getLocation(punto, función(rs){

var addComp = rs.addressComponents;

alerta( addComp.province ", " addComp.city ", " addComp.district ", " addComp.street ", " addComp.streetNumber

});

La resolución de dirección inversa puede devolver los siguientes datos:

3. Consulta todos los puntos de interés cerca de las coordenadas

Consulta el artículo para tutoriales detallados "¿Cómo utilizar Baidu Map API para obtener todos los puntos clave dentro de 100 metros alrededor del punto central en una búsqueda circular? Como todos los restaurantes, gasolineras, hoteles, edificios, etc. cerca de la Plaza de Tiananmen": blogs.com/milkmap/archive/2011/09/16/2178907.html

4. Tres métodos para calcular el distancia entre dos puntos

A través de las herramientas de conversión de longitud y latitud presentadas en este capítulo, obtenemos el siguiente conjunto de datos.

Punto de inicio:

Coordenada x de Moscato: 12057394.71

Coordenada y de Moscato: 2589680.88

Latitud y longitud lng: 108.312241

Latitud y longitud: 22.787823

Punto final:

Coordenada Moscato x. 12058626.7

Coordenada Mocatto y: 2592552.85

Latitud y longitud: 108.323308

latitud/longitud: 22.811744

(A) Llamado a través de Baidu Map API (aquí solo se pueden usar la longitud y latitud de Baidu), map.getDistance(pointA , pointB ), la distancia se puede obtener como:

alert(map.getDistance(new BMap.Point(108.312241, 22.787823), new BMap.Point(108.323308, 22.811744));

(B ) Método para calcular la distancia entre dos puntos usted mismo usando coordenadas esféricas: (Puede realizar cálculos de fondo usted mismo)

Suponga que el radio de la Tierra es R, el centro de la Tierra es 0, y las coordenadas esféricas de dos puntos A y B en la esfera son respectivamente A (α1, β1), B (α2, β2), α1, α2 ∈ [-π, π], β1, β2 ∈ [-π/ 2, π/2],

AB = R ?arccos[cosβ1cosβ2cos(α1-α2) sinβ1sinβ2]

Usando el teorema de Pitágoras y el teorema del seno, podemos encontrar la recta- distancia lineal entre dos puntos AB, y usando el teorema del seno, podemos encontrar la distancia entre dos puntos AB y el punto 0 en la tierra. Luego use la siguiente fórmula para averiguar: el grado del ángulo EOD/360 grados = la distancia esférica. entre E y D/la circunferencia del círculo máximo, y luego puedes encontrar la distancia esférica de AB

Nota: R=6370996.81 metros

(3) Método para calcular la. distancia entre dos puntos usted mismo utilizando el sistema de coordenadas rectangulares del plano: (puede calcularlo usted mismo en el fondo)

Desde la longitud y latitud de Baidu Después de obtener las coordenadas de Mercator, puede calcular fácilmente los valores. de X e Y, y luego puede usar el sistema de coordenadas plano rectangular para calcular la distancia entre dos puntos usted mismo.

alert(Math.sqrt(Math.pow((12057394.71 - 12058626.7), 2)) Math.pow((2589680.88 - 2592552.85), 2));

Todo el código fuente :

lt;! DOCTYPE htmlgt;

lt;htmlgt;

lt;headgt;

lt;meta /api?v=1.2"gt;lt;/scriptgt;

lt;/headgt;

lt;bodygt;

.lt;bodygt;

lt;div style="ancho: 400px ; altura: 650px; borde: 1px gris sólido; flotante: izquierda; " id="container"gt; lt; /divgt;

lt; div style="ancho: 500px; : izquierda; margen: 0 0 0 10px; "gt;

lt; pgt; mctX: lt; tipo de entrada="text" value="12059034.69" id ="mctX" /gt; lt;/ pgt;

lt; pgt; coordenada de Mercator y: lt; tipo de entrada="texto" valor="2590880.82" id="mctY" /gt; lt;p id="pointX" gt;lt;/pgt;

lt;p id="pointY"gt;lt;/pgt;

lt;p id=" entretenimiento"gt;lt;/pgt;

lt;pgt;lt;input style="ancho: 240px; alto: 130px; tamaño de fuente: 30px;" type="button" value= "MCT Post-Geocodificación" onclick="mctGeo();" /gt;lt;/pgt;/pgt;

lt;div id="panel" gt;lt;/divgt;

lt;/divgt;

lt;/bodygt;

lt;/htmlgt;

lt;script type="text/javascript" gt;

//Las siguientes son dos oraciones para crear un mapa

var map = new BMap.Geocoder();

map.addEventListener(" click" , function(e){

var pt = e.point;

document.getElementById("pointX").innerHTML = "Latitud y longitud lng:" pt.lng;

document.getElementById("pointY").innerHTML = "Latitud y longitud lat: getElementById("entertaiment").innerHTML = addComp.province ", " addComp.cit

y ", " addComp.district ", " addComp.street ", " addComp.streetNumber;

var allPois = rs.surroundingPois; //obtiene todos los PDI (el punto tiene un radio de 6 puntos PDI dentro 100 metros)

for(i=0; ilt; allPois.length; i){

document.getElementById("panel"). tamaño de fuente: 12px; 'gt; " (i 1) ", " allPois[i].title ", dirección: "

document.getElementById("panel"). allPois[i].address "lt;/pgt;";

map.addOverlay(new BMap.Marker(allPois[i].point));

}

}, mOption);

});

// Geocodificación inversa Mocatto

var mOption = {

poiRadius: 500, / / ​​PDI el radio es 1000 metros, el valor predeterminado es 100 metros

numPois: 12 // Enumere 50 puntos de interés, el valor predeterminado es 10

}

función mctGeo( ){

map.clearOverlays();<

document.Pixel(mctXX, mctYY

var proyección2 = map.getMapType().getProjection( );

var LngLat = proyecciones2.pointToLngLat(mctXY);

document.getElementById("pointX").innerHTML = "Latitud y longitud lng:" LngLat.lng;

p>

document.getElementById("pointY").innerHTML = "Latitud y longitud lat:" LngLat.lat;

gc.getLocation(LngLat, function(rs){

var addComp = rs.addressComponents;

document.getElementById("entertaiment").innerHTML = addComp.province ", " addComp.city ", " addComp.district ", " addComp. calle ", " addComp.streetNumber;

gc.getLocation(LngLat, functio

n(rs){

var addComp = rs.streetNumber;

var allPois = rs.surroundingPois; //obtiene todos los puntos de interés (el punto tiene un radio de 6 puntos de interés dentro de 100 metros)

for(i=0; ilt. allPois.length; i){

document.getElementById("panel").innerHTML = "lt; p style='font -size:12px; addOverlay(new BMap.Marker(allPois[i].point));

}

}, mOption); /p>

lt;/scriptgt;