我需要使用谷歌地图api来计算两个地方之间的x和y距离,因为谷歌地图使用墨卡托投影。我不需要两个地方之间的距离,而是需要delta x(沿着子午线)和delta y(沿着平行线)。如果有两个坐标(x1,y1)和(x2,y2)的位置有lat-longs(lat1,long1)和(lat2,long2),我想计算x2-x1和y2-y1,这两个的平方当然给出了两个地方之间的位移平方。谷歌地图api可以直接返回笛卡尔坐标吗?
答案 0 :(得分:0)
GMSProjection
上有几种方法可以在坐标(纬度 - 经度)和点之间进行转换。
/** Maps an Earth coordinate to a content coordinate. */
- (CGPoint)pointForCoordinate:(CLLocationCoordinate2D)coordinate;
/** Maps a content coordinate to an Earth coordinate. */
- (CLLocationCoordinate2D)coordinateForPoint:(CGPoint)point;
我认为不存在获得点之间距离的方法,但您应该能够使用标准公式。 Here's one:
CGFloat DistanceBetweenTwoPoints(CGPoint point1,CGPoint point2)
{
CGFloat dx = point2.x - point1.x;
CGFloat dy = point2.y - point1.y;
return sqrt(dx*dx + dy*dy );
};
答案 1 :(得分:0)
给出WGS84度中的两点:
(lon1, lat1),
(lon2, lat2)
获取Delta纬度:
dLat = lat2- lat1;
同样的长期
dLon = lon2 - lon1;
delta结果现在是度数。
如果您希望结果以米为单位,则必须采用x,y
中的投影坐标deltaXMeter = x2 - x1;
deltayMeter = y2 - y1;
当x和y在笛卡尔仪表坐标系统中共存时。
答案 2 :(得分:0)
尝试使用半正式公式来测量PHP中两个坐标之间的距离
function haversineGreatCircleDistance($latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371000)
{
// convert from degrees to radians
$latFrom = deg2rad($latitudeFrom);
$lonFrom = deg2rad($longitudeFrom);
$latTo = deg2rad($latitudeTo);
$lonTo = deg2rad($longitudeTo);
$latDelta = $latTo - $latFrom;
$lonDelta = $lonTo - $lonFrom;
$angle = 2 * asin(sqrt(pow(sin($latDelta / 2), 2) +
cos($latFrom) * cos($latTo) * pow(sin($lonDelta / 2), 2)));
return $angle * $earthRadius;
}