是否有办法使用Google Maps API或任何其他API来了解其所在区域的特定点并获取该区域的多边形?
我知道使用Google Maps API我可以获得政治领域等几个信息,但我怎样才能获得定义它们的多边形?
我有兴趣了解地区或城市边界,而不是国家/地区。
最好我想在控制台应用程序中使用。
答案 0 :(得分:0)
感谢 Steve Benett
的评论,我终于得到了线索的开头,这让我得到了答案。
首先我开始使用proposed link,这导致我点击了SO like question帮助页面上的openstreetmap。
之后我问my own question,希望有人可以获得有关我正在寻找的更多相关信息。
在那里我得到另一条评论建议我使用他们的Nominatim service来获取给定坐标所属区域的名称。
拥有该信息后,我可以使用相同的服务来请求定义该区域的多边形。
最后,对于想要查看其示例的人,我使用这些服务创建了jsfiddle。只需使用要检查的点的lat和lng填写两个输入框,最后会得到一张标有所请求区域的地图。
以防jsfiddle出错,这是我的代码。它并不完美,但能胜任。有一些已知的问题(检查这些代码后):
<强> HTML 强>
<div>
<input type="text" id="lat" value="36.5100710" />
<input type="text" id="lng" value="-4.8824474" />
<button id="btn">Submit</button>
</div>
<div>
<div id="map" style="width: 500px; height: 400px;"></div>
<script src="http://maps.google.com/maps/api/js?sensor=false"></script>
</div>
<强> JS 强>
var boundingbox = [];
var geojson = [];
var getMap = function (lat, lng) {
$.ajax({
url: 'http://nominatim.openstreetmap.org/reverse',
data: {
format: 'json',
lat: lat,
lon: lng
},
type: 'GET'
}).success(function (region) {
//console.log(region);
$.ajax({
url: 'http://nominatim.openstreetmap.org/search',
data: {
format: 'json',
country: region.address.country,
state: region.address.state,
polygon_geojson: 1
},
type: 'GET'
}).success(function (data) {
boundingbox = data[0].boundingbox;
if (data[0].geojson.type == 'Polygon') {
console.log(data[0].geojson.coordinates[0]);
$.each(data[0].geojson.coordinates[0], function (i) {
geojson.push(new google.maps.LatLng(data[0].geojson.coordinates[0][i][1], data[0].geojson.coordinates[0][i][0]));
});
} else {
console.log(data[0].geojson.coordinates[0][0]);
$.each(data[0].geojson.coordinates[0][0], function (i) {
geojson.push(new google.maps.LatLng(data[0].geojson.coordinates[0][0][i][1], data[0].geojson.coordinates[0][0][i][0]));
});
}
//console.log([boundingbox, geojson]);
}).then(function () {
var map = new google.maps.Map(document.getElementById('map'), {
//zoom: 12,
//center: new google.maps.LatLng(52.2265968, 4.5504552),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var infowindow = new google.maps.InfoWindow();
var requestedPolygon = new google.maps.Polygon({
paths: geojson,
strokeColor: '#FF0000',
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: '#FF0000',
fillOpacity: 0.35
});
//console.log(bermudaTriangle);
requestedPolygon.setMap(map);
var a = new google.maps.LatLng(parseFloat(boundingbox[0]), parseFloat(boundingbox[2]));
var b = new google.maps.LatLng(parseFloat(boundingbox[1]), parseFloat(boundingbox[3]));;
var bounds = new google.maps.LatLngBounds();
bounds.extend(a);
bounds.extend(b);
map.fitBounds(bounds);
})
})
}
$(function () {
$("#btn").click(function () {
console.log("s");
var lat = $("#lat").val();
var lng = $("#lng").val();
getMap(lat, lng);
});
});
已知问题
有些情况下返回的类型是多面,实际上是多边形数组。在我的样本中,我只得到第一个多边形,这是错误的,但这只是一个展示案例,而不是最终的解决方案。
如果您更改区域,则它不会清除上一个区域并稍微连接它们。