3 votos

¿Comprobar si la lat/long está en el mar utilizando la API de Google Maps?

Estoy utilizando la API de Google Maps, en la que a partir de ahora estamos trazando la pista de un buque, pero el sistema nos permite ahora actualizar incluso una Lat/Long que está en tierra. ¿Hay alguna manera de detener esto y comprobar que el sistema debe permitir sólo las actualizaciones de una lat/long que está en el mar?

1voto

Joe Puntos 16

Como escribió @blah238, se pueden encontrar varias ideas de https://stackoverflow.com/questions/9644452/verify-if-a-point-is-land-or-water-in-google-maps

Si confías en el color del mapa entonces podrías comprobar si el lugar en cada Lat/Long está pintado con el color del mar o algo más. Puedes demostrarlo con gdallocationinfo y el controlador GDAL WMS. Lee sobre esto en

http://gdal.org/gdallocationinfo.html

http://www.gdal.org/frmt_wms.html

Guarda el archivo de definición de Google Maps de la página del controlador WMS en el disco como "frmt_wms_googlemaps_tms.xml". He copiado el contenido del archivo aquí

<GDAL_WMS>

<!-- Data is subject to term of use detailed at http://code.google.com/intl/nl/apis/maps/terms.html and
     http://www.google.com/intl/en_ALL/help/terms_maps.html -->

    <Service name="TMS">
        <ServerUrl>http://mt.google.com/vt/lyrs=m&amp;x=${x}&amp;y=${y}&amp;z=${z}</ServerUrl> <!-- Map -->
        <!-- <ServerUrl>http://mt.google.com/vt/lyrs=s&amp;x=${x}&amp;y=${y}&amp;z=${z}</ServerUrl> --> <!-- Satellite -->
        <!-- <ServerUrl>http://mt.google.com/vt/lyrs=y&amp;x=${x}&amp;y=${y}&amp;z=${z}</ServerUrl> --> <!-- Hybrid -->
        <!-- <ServerUrl>http://mt.google.com/vt/lyrs=t&amp;x=${x}&amp;y=${y}&amp;z=${z}</ServerUrl> --> <!-- Terrain -->
        <!-- <ServerUrl>http://mt.google.com/vt/lyrs=p&amp;x=${x}&amp;y=${y}&amp;z=${z}</ServerUrl> --> <!-- Terrain, Streets and Water  -->
    </Service>
    <DataWindow>
        <UpperLeftX>-20037508.34</UpperLeftX>
        <UpperLeftY>20037508.34</UpperLeftY>
        <LowerRightX>20037508.34</LowerRightX>
        <LowerRightY>-20037508.34</LowerRightY>
        <TileLevel>20</TileLevel>
        <TileCountX>1</TileCountX>
        <TileCountY>1</TileCountY>
        <YOrigin>top</YOrigin>
    </DataWindow>
    <Projection>EPSG:900913</Projection>
    <BlockSizeX>256</BlockSizeX>
    <BlockSizeY>256</BlockSizeY>
    <BandsCount>3</BandsCount>
    <MaxConnections>5</MaxConnections>
    <Cache />
</GDAL_WMS>

Ahora sólo debes ejecutar gdallocationinfo desde este archivo de definición de Google Maps. Este ejemplo comprueba qué hay en las coordenadas WGS84 (0,0)

gdallocationinfo -wgs84 frmt_wms_googlemaps_tms.xml 0 0
Report:
Location: (134217728P,134217728L)
Band 1:
Value: 148
Band 2:
Value: 107
Band 3:
Value: 76

No tengo ni idea de si todo lo que tiene valores RGB (148,107,76) en Google Maps es mar. Todo lo que es mar tiene obviamente este valor debido a las etiquetas.

1voto

RichardP Puntos 33

Existe una API web gratuita que resuelve exactamente este problema, llamada onwater.io . Dada una latitud y una longitud, devolverá con exactitud true o false a través de una petición get.

Ejemplo sobre el agua: https://api.onwater.io/23.92323,-66.3

{
  lat: 23.92323,
  lon: -66.3,
  water: true
}

Ejemplo en tierra: https://api.onwater.io/42.35,-71.1

{
  lat: 42.35,
  lon: -71.1,
  water: false
}

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X