用PHP转换知名文本(WKT)从MySQL到谷歌地图多边形
Convert Well-known text (WKT) from MySQL to Google Maps polygons with PHP
我已经搜索了整个网络,我还没有找到任何解决方案…我找到的任何解决方案都不适合我……我有一个行与VARCHARS和其他与这些几何类型,例如:
多边形((23.953261 - 37.733372,23.953623 - 37.733202,23.953572 - 37.733132,23.954075 - 37.732896,23.954126 - 37.732966,23.954550 - 37.732767,23.954566 - 37.732698,23.954467 - 37.732603,23.954258 - 37.732476,23.953007 - 37.733041,23.953207 - 37.733303,23.953261 - 37.733372),(23.953695 - 37.732771,23.954243 - 37.732524,23.954427 - 37.732635,23.954496 - 37.732702,23.954484 - 37.732757,23.954133 - 37.732921,23.954087 - 37.732859,23.953525 - 37.733122,23.953577 - 37.733192,23.953292 - 37.733326,23.953080 - 37.733050,23.953695 - 37.732771))
和
MULTIPOLYGON(((23.949134 37.734540,23.948811 37.734215,23.948775 37.734238, 23.9489077 37.734541,23.948689 37.734820,23.948809 37.734447,23.948414 37.734470,23.948472 37.734526,23.948420 37.734560,23.948449 37.734588,23.948536 37.734531)))
和不带外圈的简单多边形....
我想:mysql查询解析数据,将它们传递给js并把他们吸引到谷歌地图上。有什么帮助吗?
听起来这真的是一个正则表达式问题,因为你根本不知道如何正确地从这些字符串中提取所有的坐标集,对吗?正则表达式是你的朋友,做一些谷歌关于他们的理解,因为我将只演示在这里。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Some Title</title>
</head>
<body>
<div id="map_canvas" style="width:800px; height:600px;">
</div>
<?php
$polyString1 = 'POLYGON((23.953261 37.733372,23.953623 37.733202,23.953572 37.733132,23.954075 37.732896,23.954126 37.732966,23.954550 37.732767,23.954566 37.732698,23.954467 37.732603,23.954258 37.732476,23.953007 37.733041,23.953207 37.733303,23.953261 37.733372),(23.953695 37.732771,23.954243 37.732524,23.954427 37.732635,23.954496 37.732702,23.954484 37.732757,23.954133 37.732921,23.954087 37.732859,23.953525 37.733122,23.953577 37.733192,23.953292 37.733326,23.953080 37.733050,23.953695 37.732771))';
$polyString2 = 'MULTIPOLYGON(((23.949134 37.734540,23.948811 37.734215,23.948775 37.734238,23.949077 37.734541,23.948689 37.734820,23.948809 37.734747,23.949134 37.734540)),((23.948536 37.734531,23.948449 37.734447,23.948414 37.734470,23.948472 37.734526,23.948420 37.734560,23.948449 37.734588,23.948536 37.734531)))';
echo '<script type="text/javascript">';
//note the quote styles below, Important!
echo "var polys=['$polyString1','$polyString2'];";
echo '</script>';
?>
<script src="https://maps.googleapis.com/maps/api/js?v=3&sensor=false"></script>
<script type="text/javascript">
function parsePolyStrings(ps) {
var i, j, lat, lng, tmp, tmpArr,
arr = [],
//match '(' and ')' plus contents between them which contain anything other than '(' or ')'
m = ps.match(/'([^'(')]+')/g);
if (m !== null) {
for (i = 0; i < m.length; i++) {
//match all numeric strings
tmp = m[i].match(/-?'d+'.?'d*/g);
if (tmp !== null) {
//convert all the coordinate sets in tmp from strings to Numbers and convert to LatLng objects
for (j = 0, tmpArr = []; j < tmp.length; j+=2) {
lat = Number(tmp[j]);
lng = Number(tmp[j + 1]);
tmpArr.push(new google.maps.LatLng(lat, lng));
}
arr.push(tmpArr);
}
}
}
//array of arrays of LatLng objects, or empty array
return arr;
}
function init() {
var i, tmp,
myOptions = {
zoom: 16,
center: new google.maps.LatLng(23.9511, 37.7337),
mapTypeId: google.maps.MapTypeId.ROADMAP
},
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
for (i = 0; i < polys.length; i++) {
tmp = parsePolyStrings(polys[i]);
if (tmp.length) {
polys[i] = new google.maps.Polygon({
paths : tmp,
strokeColor : '#FF0000',
strokeOpacity : 0.8,
strokeWeight : 2,
fillColor : '#FF0000',
fillOpacity : 0.35
});
polys[i].setMap(map);
}
}
}
init();
</script>
</body>
</html>
您可以使用开源库Wicket直接将WKT字符串转换为Google Maps API几何对象。下面是一个演示:
http://arthur-e.github.io/Wicket/sandbox-gmaps3.html@astupidname几乎是正确的,但会让您出错的是,空间数据库使用经度、纬度,而地图系统使用经度、纬度。因此,WKT的输入是x,y(经度,纬度)。
lat = Number(tmp[j]);
lng = Number(tmp[j + 1]);
应该lng = Number(tmp[j]);
lat = Number(tmp[j + 1]);
除了Wicket(正如Arthur所提到的)之外,还有Mapbox,它在客户端JavaScript中处理这种众所周知的文本。
- 使用jquery将mysql数据获取到新的表行中
- SVG/JavaScript:尝试选择和更改多边形点
- 将地理编码结果转换为php变量以发布到mysql数据库
- 如何获取谷歌地图多边形的当前fillColor
- 如何使用JS禁用表行,并在MYSQL中插入所选选项
- 从MySQL数据库中获取输入数据需要两次页面刷新
- 将一个表的id与另一个表中的user_id进行匹配,以获取mysql中的记录
- 在php和mysql中选择选项.一旦选择了选项,就列出我的sql数据库数据
- 如何在OpenLayers中获取动态绘制的多边形的坐标
- 如何使用PHP将javascript变量添加到mysql数据库中
- 将phonegap图像发布到php/mysql-图像字段从发布请求中消失
- 在node.js-mysql中执行UPDATE查询不起作用
- 使用Google Maps API驱动时间多边形
- 更新从Mysql查询检索到的数据?Node.js节点mysql
- 单击鼠标,用MySQL数据填充html表单输入字段
- 浓缩一系列mySQL查询
- Matlab点在多边形中
- 在谷歌地图上为每个“多边形”生成新的多段线;日期“;来自mysql的值
- 用PHP转换知名文本(WKT)从MySQL到谷歌地图多边形
- 绘制多个多边形在谷歌地图API v3从MySQL数据库