感谢Steve Benett的cmets,我终于得到了引导我答案的线程的开始。
首先我登录了proposed link,这导致我在openstreetmap 的帮助页面上点击了SO like question。
在那之后我问了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);
});
});
已知问题