【发布时间】:2014-10-01 09:41:06
【问题描述】:
我想显示一个显示一组标记的地图。我正在使用 OSM 和 OpenLayers 库来做到这一点。如果我使用静态值,一切正常。但现在我想显示 SQL 表中的标记。获取数据并将其填充到 JS 数组中的最佳方法是什么?
这是我的代码:
<script>
map = new OpenLayers.Map("mapdiv");
map.addLayer(new OpenLayers.Layer.OSM());
var size = new OpenLayers.Size(10,10);
var icon = new OpenLayers.Icon('img/marker.gif', size);
epsg4326 = new OpenLayers.Projection("EPSG:4326"); //WGS 1984 projection
projectTo = map.getProjectionObject(); //The map projection (Spherical Mercator)
var lonLat = new OpenLayers.LonLat( 8.289166666666, 46.834444444444 ) .transform(epsg4326, projectTo);
var zoom=8;
map.setCenter (lonLat, zoom);
// var markers = new OpenLayers.Layer.Markers( "Markers" );
// map.addLayer(markers);
// markers.addMarker(new OpenLayers.Marker(lonLat, icon));
var vectorLayer = new OpenLayers.Layer.Vector("Overlay");
// Define an array.
var markers = [
// SQL DATA NEEDS TO GO HERE! Formated like this:
// [47.153339352283,8.51886974582752],
// [47.5047313406471,8.76598280071111],
// [47.3085363748528,8.598335445835]
];
//Loop through the markers array
for (var i=0; i<markers.length; i++) {
var lon = markers[i][1];
var lat = markers[i][0];
var feature = new OpenLayers.Feature.Vector(
new OpenLayers.Geometry.Point( lon, lat ).transform(epsg4326, projectTo),
{description: "marker number " + i} ,
{externalGraphic: 'img/marker.gif', graphicHeight: 10, graphicWidth: 10, }
);
vectorLayer.addFeatures(feature);
}
map.addLayer(vectorLayer);
</script>
SQL 表:
谢谢你:)
【问题讨论】:
-
使用 ajax 和像 php 或 asp 这样的服务器端语言来提取数据并将其作为 json 推送出去。使用结果然后填充 OSM 需要的内容
-
哪个数据库?如果是 Postgres,您可以使用 st_asjson 并使用 java、php 从您的服务器返回 geojson,因为 (geo)json 可以很容易地转换为开放层功能。
-
@JohnBarça 我正在使用 MS SQL Server...
-
我建议使用 .NET JSON 类从 SQL 服务器创建 JSON,并将其发送到 OpenLayers。
标签: javascript sql arrays openlayers openstreetmap