gpt4 book ai didi

php - 将地址转换/地理编码为经纬度坐标 - Spiderfier for google map

转载 作者:行者123 更新时间:2023-11-29 14:19:44 27 4
gpt4 key购买 nike

我正在尝试将 Spiderfier 实现到我的代码中,但在将字符串地址转换为(纬度)坐标时遇到一些困难。

演示:http://jawj.github.com/OverlappingMarkerSpiderfier/demo.html

文档:https://github.com/jawj/OverlappingMarkerSpiderfier

这就是我从数据库中获取地址的方法,现在我需要将其转换为(纬度、经度)格式

<?php 
$locations = new locations;
$userid = '1';
$cityArray = $locations->pastLocations($userid);
$title = $locations->pastTitles($userid);
$length = count($cityArray);
?>

//now that I have the cityArray acquired from php, I encode them for javascript
<script>
var cityArray= <?php echo json_encode($cityArray); ?>;
var title = <?php echo json_encode($title); ?>;

好的,现在我的地址已经在数组中了。 Spiderfier 的示例使用以下代码生成随机位置(足够接近以重叠)

var baseJitter = 2.5;
var clusterJitterMax = 0.1;
var rnd = Math.random;
var data = [];
var clusterSizes = [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,2, 3, 3, 4, 5, 6, 7, 8, 9, 12, 18, 24];
for (var i = 0; i < clusterSizes.length; i++) {
GClientGeocoder.getLatLng()
var baseLon = -1 - baseJitter / 2 + rnd() * baseJitter;
var baseLat = 52 - baseJitter / 2 + rnd() * baseJitter;
var clusterJitter = clusterJitterMax * rnd();
for (var j = 0; j < clusterSizes[i]; j ++) data.push({
lon: baseLon - clusterJitter + rnd() * clusterJitter,
lat: baseLat - clusterJitter + rnd() * clusterJitter,
h: new Date(1E12 + rnd() * 1E11).toString(), //this is the title
d: Math.round(rnd() * 100) + '% happy'
});
}
window.mapData = data;

这是 Spiderfier 用于绘制数据数组的代码。这是我在生成它使用的数据数组时遇到问题的部分

var bounds = new gm.LatLngBounds();

for (var i = 0; i < window.mapData.length; i ++) {
var datum = window.mapData[i];
var loc = new gm.LatLng(datum.lat, datum.lon);
bounds.extend(loc);
var marker = new gm.Marker({
position: loc,
title: datum.h,
map: map,
icon: iconWithColor(usualColor),
shadow: shadow
});
marker.desc = datum.d;
oms.addMarker(marker);
}
map.fitBounds(bounds);

假设我有一个可以输入地理编码的数组,如何将地址(例如德克萨斯州达拉斯)转换为可以与 Spiderfier 一起使用的(经纬度)格式?请记住,该数组中有多个地址,因此我必须循环遍历并将每个地址以某种方式插入数据数组中。这主要是我感到困惑的地方。

谢谢!

编辑 - 我尝试编写一些代码循环遍历我的 cityArray 并对每个城市进行地理编码,然后将其插入到名为 data 的数组中,但不幸的是它不起作用

这是代码。当我使用 document.write(data) 时,什么也没有显示。我也没有收到任何错误,所以我不确定我做错了什么。

var data = [];
for (var i = 0; i < cityArray.length; i++) {
//document.write(cityArray[i]);
geocoder.geocode( { 'address': cityArray[i] }, function(results, status) { //use latlang to enter city instead of coordinates
if (status == google.maps.GeocoderStatus.OK) {
data.push({
position:results[0].geometry.location,
h: 'test',
d: 'test'
});
}
else {
alert("Geocode was not successful for the following reason: " + status);
}
});
}

最佳答案

您的问题是如何将地址转换为地理坐标(纬度和经度)以供 Google map 使用。

将地址转换为坐标的过程称为地理编码。

Google Maps API v3 包括 client side geocoder当用户输入地址时使用。

还有一个geocoding web service供服务器使用。

两者都受到配额和费率限制。

查看此article from the documentation了解它们的用途以及每种方式何时适用的讨论。

如果您有数据库,最理想的选择是在将地址输入数据库时​​对地址进行地理编码,然后使用数据库中的坐标来放置标记,而不是“动态”对它们进行地理编码。

关于php - 将地址转换/地理编码为经纬度坐标 - Spiderfier for google map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11943022/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com