当位置有多个代码时,需要从邮政编码数据库中计算纬度经度
Posted
技术标签:
【中文标题】当位置有多个代码时,需要从邮政编码数据库中计算纬度经度【英文标题】:Need to calculate latitude longitude from postal code database when location has multiple codes 【发布时间】:2013-10-07 22:06:43 【问题描述】:当给定位置有多个代码时,如何从邮政编码数据库计算给定位置的纬度/经度?例如,纽约市有 165 个邮政编码。
SQL示例(表中还有Latitude和Longitude列):
SELECT City, [State], StateAbbr, Country, COUNT(*) AS ctCodes
FROM PostalCodes
WHERE (City = 'New York City' AND StateAbbr = 'NY')
GROUP BY City, [State], StateAbbr, Country
ORDER BY ctCodes DESC
返回:
City | State | StateAbbr | Country | ctCodes
New York City | New York | NY | US | 165
我考虑过计算边界中心的纬度/经度,这有点复杂。考虑这个查询:
SELECT City, [State], StateAbbr, Country,
COUNT(*) AS ctCodes,
MIN(Latitude) AS south,
MAX(Latitude) AS north,
MIN(Longitude) AS west,
MAX(Longitude) AS east
FROM PostalCodes
WHERE (City = 'New York City' AND StateAbbr = 'NY')
GROUP BY City, [State], StateAbbr, Country
ORDER BY ctCodes DESC
返回:
City | State | StateAbbr | Country | ctCodes | south | north | west | east
New York City | New York | NY | US | 165 |40.69640|40.86620|-74.02530|-73.67310
获取边界矩形适用于北美,但显然不适用于南半球或本初子午线以东。我走在正确的道路上吗?有一个更好的方法吗?任何帮助将不胜感激。
【问题讨论】:
你能平均给定城市的所有坐标吗?这在全球任何地方都行不通吗? 有趣...我不确定这会奏效如何,我不得不承认我从未想过。 我曾经经历过这种痛苦……你会发现建筑物的不同楼层会有自己的邮政编码。有一些“形状”文件将这些区域(或类似的区域细分)包含为多边形,这些多边形比这样的边界框工作得好得多……当它已经免费存在于网络上时,为什么还要工作? :) 然后你在多边形中找到一个点。您在哪个数据库中工作?...地理编码因数据库而异。 我不记得我在哪里得到了数据库...几年前我免费下载了它,它在全球范围内。我只需要让某些东西工作起来,直到我们有时间更好地拨入它,或者可以将其卸载到服务中。 【参考方案1】:计算边界框或平均经纬度坐标或多或少适用于不在180th meridian 上的位置;也就是说,除了斐济,几乎在任何地方。
一种适用于全球任何地方(包括斐济)的方法是将坐标转换为 3D 球体上的点、计算中点并将中点投影到球体表面。这当然会在计算上更加昂贵。
首先将每个 lat-lng 对转换为 3D 笛卡尔坐标:
x = cos(lat)*cos(lng)
y = cos(lat)*sin(lng)
z = sin(lat)
然后通过平均坐标计算中点,给出(x', y', z')
。现在将其转换回 lat-lng,您将获得中心点的坐标:
r = sqrt(x'² + y'² + z'²)
lat' = asin(z'/r)
lng' = atan2(y', x')
【讨论】:
好的,所以如果我明白这一点,我将获取每个坐标(NW、NE、SE、SW)并将它们转换为 3D 笛卡尔坐标(看起来很简单)。但是你所说的“平均坐标,给出(x',y',z')”是什么意思,我是否对 4 个点中的每一个点的 X 进行平均,并对其他 3 个点做同样的事情,这会给我 X( 1), Y(1), Z(1)? 是:分别平均 x、y 和 z。如果您计算所有点的平均值,而不仅仅是边界框的 4 个角点,您可能会得到更好的结果。 您的意思是计算每个邮政编码的笛卡尔坐标? 是的;您可以在数据库中完成所有这些操作。以上是关于当位置有多个代码时,需要从邮政编码数据库中计算纬度经度的主要内容,如果未能解决你的问题,请参考以下文章