我希望确定给定地理点(已知 GPS 坐标)所在的美国州和县。我相信我可以获得有关州和县拐角坐标的数据,但是我需要一种算法来计算该点落在哪个州和县。
我不是 Java 或 C 用户,但我是 Panorama (provue.com) 的一位非常有经验的程序员,这是一个数据库管理系统,具有非常全面和强大的编程语言。所以我需要访问一个通用定义的算法。
迈克尔
我希望确定给定地理点(已知 GPS 坐标)所在的美国州和县。我相信我可以获得有关州和县拐角坐标的数据,但是我需要一种算法来计算该点落在哪个州和县。
我不是 Java 或 C 用户,但我是 Panorama (provue.com) 的一位非常有经验的程序员,这是一个数据库管理系统,具有非常全面和强大的编程语言。所以我需要访问一个通用定义的算法。
迈克尔
首先,您应该有一组多边形,每个多边形对应于美国的一个州,例如http://www.nws.noaa.gov/geodata/catalog/national/html/us_state.htm
然后您可以使用http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html#The C Code中给出的以下算法
int pnpoly(int nvert, float *vertx, float *verty, float testx, float testy)
{
int i, j, c = 0;
for (i = 0, j = nvert-1; i < nvert; j = i++) {
if ( ((verty[i]>testy) != (verty[j]>testy)) &&
(testx < (vertx[j]-vertx[i]) * (testy-verty[i]) / (verty[j]-verty[i]) + vertx[i]) )
c = !c;
}
return c;
}
nvert:多边形中的顶点数。下面讨论是否重复最后的第一个顶点。
vertx, verty:包含多边形顶点的 x 和 y 坐标的数组。
testx, testy:测试点的 X 和 y 坐标。
快速而肮脏:
您可以通过以下方式
将此项目用作 HTTP 请求: http ://www.ngs.noaa.gov/cgi-bin/spc_getpc.prl?LatBox=N385930.99999&LonBox=W0985930.99999
并解析响应以提取状态。