我有以下代码来解析country选择自动完成列表的时间:
$('#spot_address').autocomplete({
// This bit uses the geocoder to fetch address values
source: function(request, response) {
geocoder.geocode( {'address': request.term }, function(results, status) {
// Get address_components
for (var i = 0; i < results[0].address_components.length; i++)
{
var addr = results[0].address_components[i];
var getCountry;
if (addr.types[0] == 'country')
getCountry = addr.long_name;
}
response($.map(results, function(item) {
return {
label: item.formatted_address,
value: item.formatted_address,
latitude: item.geometry.location.lat(),
longitude: item.geometry.location.lng(),
country: getCountry
}
}));
})
},
// This bit is executed upon selection of an …Run Code Online (Sandbox Code Playgroud) 我正在使用Google Maps V3 api.我正在提交地址搜索以返回正确的地理编码结果,包括地址,建立名称和lat/lngs.
我的问题是来自地理编码器的响应可以采用不同的格式.它始终遵循相同的结构,但是一些响应对address_components数据结构使用不同的键.
例如,某些搜索会导致:
establishment -> location name
street_number -> address street number
route -> the street name
locality -> the city
administrative_area_level_1 -> the state
postal_code -> zip/postal code
Run Code Online (Sandbox Code Playgroud)
然而,如果我要搜索一般区域,例如"Hampton Beach,NH",我会收到:
sublocality -> beach name / area
administrative_area_level_3 -> city/town name
administrative_area_level_1 -> the state
postal_code -> zip/postal code
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,这两个回答有其不同之处.是否有一个已知的jquery库可用于处理这些不同的响应,以返回可用于人类可读方式的地址组件的数据集?
我会注意到响应也返回一个"formatted_address"类型,它返回它:"Hampton Beach,NH 03842,USA"或"Boston University,1 University Rd,Boston,MA 02215-1407,USA"正如你所看到的,这些也是非常不同的.我可以用逗号分割,但我想使用实际的address_components来实现完美的数据库插入.
是否有任何这样的API给定一个位置(就latlong而言),我可以找到给定点是否在道路/街道上.如果可能的话,也会给我最近的街道/道路.我从[查找附近的街道] - > http://www.geonames.org/maps/us-reverse-geocoder.html#findNearbyStreets找到了API ,但它只为美国提供了解决方案.如果您知道任何更好的解决方案/算法,请帮助我.(我对印度特别感兴趣.)
Currenty,我使用以下代码来获取国家/地区,邮政编码,地区和子地区:
var country, postal_code, locality, sublocality;
for (i = 0; i < results[0].address_components.length; ++i)
{
for (j = 0; j < results[0].address_components[i].types.length; ++j)
{
if (!country && results[0].address_components[i].types[j] == "country")
country = results[0].address_components[i].long_name;
else if (!postal_code && results[0].address_components[i].types[j] == "postal_code")
postal_code = results[0].address_components[i].long_name;
else if (!locality && results[0].address_components[i].types[j] == "locality")
locality = results[0].address_components[i].long_name;
else if (!sublocality && results[0].address_components[i].types[j] == "sublocality")
sublocality = results[0].address_components[i].long_name;
}
}
Run Code Online (Sandbox Code Playgroud)
那令人不满意.有没有其他方法可以达到相同的效果?
你们最近一直在用谷歌地图帮助解决我的一些问题,谢谢你们.
我几乎完成了这个 - 只留下一个问题.当我将第一个标记放在地图上时,它会捕捉到最近的街道(这很好!)但是当我将第一个标记拖到另一个地方时,方向突然变得混乱.标记得到混合.
您可以在http://dev.korebogen.dk/gmap/上看到一个示例
我需要移动第一个标记(仍然是对齐),当我放置第二个标记时,首先加载方向.但为了使第一个标记再次弹出,我必须加载方向.
我希望你们中的一些人有一个解决方案.提前致谢.
我有个问题。我知道在谷歌地图中,GDirections.loadFromWayPoints有 25 个GLatLng对象的限制。我想要的是制作一条路线,比如 300 点。
我怎样才能做到这一点?我想到的解决方案是使用 25 个位置的数组,然后调用 loadFromWaypoints,创建另一个 25 个位置的数组,然后调用 loadFromWayPoints 等等,但是当我这样做时,我只能看到我的地图中的第一个数组。
有什么建议?
这是我的 ajax 函数,它尝试执行我所描述的操作:
function ajaxFunction(url){
var ajaxRequest; // The variable that makes Ajax possible!
try{
// Opera 8.0+, Firefox, Safari
ajaxRequest = new XMLHttpRequest();
} catch (e){
// Internet Explorer Browsers
try{
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try{
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e){
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
// Create …Run Code Online (Sandbox Code Playgroud) 在javascript中,使用Google maps apis指定选项,例如google.maps.TravelMode.DRIVING.我们TravelMode在android中有任何等价物吗?我看不到任何内容android.location.LocationManager或者android.location.Criteria
我想到了以下选项:
使用一些TravelMode替代方法,获得近似于最近的街道/道路的坐标.
或者,(不是优选的,因为它会很慢)通常获得坐标,然后可能将它发送到一些谷歌api(这将是非常慢,因为有很多点)并将坐标校正到最近的街道坐标.或者如果存在一些(谷歌地图)javascript框架,它可以用于获得相应的街道坐标.
EDIT1:
我也研究了这个.因而进入android.location.Geocoder.在getFromLocation这一类似乎做的大部分工作.但是,我担心,在获取最近的地址时会有额外的延迟.