什么是构建几乎不需要维护的Web地图的良好Javascript Web API(最好是开放的)?


11

我最近自愿为当地的非营利组织制作网络地图。该地图将非常基本。它需要显示俄勒冈州的莱恩县,该县分为多个区域,每个区域都有一个“中央办公室”位置。我计划在夏季的业余时间进行构建,并且希望能够将其交付给他们,并且几乎不需要将来进行任何维护。

我已经使用ArcGIS Java API和ArcGIS Server构建了许多网络地图,但是我计划学习其他API,因为该组织没有任何ESRI软件(或者任何GIS)。我一直在考虑OpenLayers / OpenGeo。要记住的一件事是,该组织没有/没有设置服务器来托管此地图的图层,因此我不确定如何存储和访问数据。JSON也许?

我目前不熟悉大多数非ArcGIS解决方案,因此任何建议都将不胜感激。

Answers:


4

您可以像在此OpenLayers示例中将功能硬编码为Javascript:http : //openlayers.org/dev/examples/vector-features.html。无需担心进一步的数据存储。当然,如果您要显示的功能很少,这只是一个选择。但这是一个“单一文件”解决方案,任何未来的维护者都应该能够想到。

如果可以将多边形导出到shapefile,则QGIS可以帮助“提取节点”,然后可以使用它们在OpenLayers中创建多边形,如下所示:

// create a polygon feature from a linear ring of points
var pointList = [new OpenLayers.Geometry.Point(x1,y1),new OpenLayers.Geometry.Point(x2,y2),<<<more points>>>];
var linearRing = new OpenLayers.Geometry.LinearRing(pointList);
var polygonFeature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Polygon([linearRing]));

如果要将这些多边形叠加在Google地图或类似的地图上,则可能需要先将这些多边形重新投影到Web Mercator投影。


谢谢!只要我没有太多功能,这看起来可能就是我需要的。我会尝试一下。我只需要弄清楚如何将当前的District面要素类导出到这些硬编码值中。
Tanner

1
@Tanner:您可以使用GDAL / OGR转换为GeoJSON。至少给他们一个Cloudmade,Google Maps,Yahoo!OpenLayers中的Maps或Bing Maps基本层。我讨厌听起来像在推动商业产品,但听起来好像您是出于Open Tech的目的而使用Open tech。给组织一张看起来不错的地图。
肖恩

@Tanner:您以哪种格式存储区数据?
Underdark

ArcGIS面要素类。
Tanner

@Sean:感谢您的建议。我将检查GDAL / OGR。因为这是一个志愿者项目,所以(希望)这是一项一次性交易。我不想回到它。主要关注的问题是制作一个简单的Web地图,该地图可以托管在他们的网站上,而不需要任何服务器软件(例如MapServer),并且极有可能在不久的将来中断。如果商业基础层/ API可以提供此功能,我将考虑。至少我可能会使用商业基础层。
Tanner

10

对于开源映射解决方案,您可以考虑以下几点:

  1. Mapping Server Platform-基于Java的GeoServer和开源。在许多生产环境中都能很好地工作:检查:http : //geoserver.org/display/GEOS/Welcome 用户手册:http : //docs.geoserver.org/stable/zh/user/

    其他选项是MapServer:http : //mapserver.org/

    检查比较:http : //www.slideshare.net/novum.limitis/mapserver-vs-geoserver

  2. 客户端-网页脚本。Openlayers最可取的例子是它,它是从许多示例开始并且易于实现的。检查:http : //openlayers.org/ 示例:http : //openlayers.org/dev/examples/

  3. 空间数据:您可以根据其条款和条件以及许可使用Google / Yahoo / Bing地图。或您可以在GeoServer中发布并使用的OpenStreet地图。OpenStreet地图:http : //www.openstreetmap.org/ OpenStreet地图形状文件可以通过以下网址下载:http : //wiki.openstreetmap.org/wiki/Shapefiles

如果您要使用Google / Yahoo / Bing地图,则可以使用其API或OpenLayers来使用它,而不需要GeoServer和空间数据。即使要求好的Web Map API的问题,上面也给出了Mapping平台和Spatial数据参考以考虑完全开源的Mapping平台。


我说的是金田,但最好放!
MerseyViking

3

我将OpenLayers用作我的UG论文的一部分,我对此没有错。是的,我能做到,直到昨晚深夜才设法使其表现正常,但这在我试图组建移动友好型网站而不是OL本身时主要是无知。

使用WMS添加来自其他服务器的图层很容易;我运行的MapServer分配了WMS磁贴,从OL中我只使用:

var layer = new OpenLayers.Layer.WMS(
    "Resistivity",
    "http://mywebsite.com/maps?map=amap.map",
    {'layers': 'resistivity', 'format':'image/png', 'transparent':'true'},
    {singleTile: true}
);

map.addLayer(layer);

确实,它可以应付WFS甚至WFS-T服务器,并与OSM,Google或Bing地图和照片图层配合使用,您可以拥有外观精美,占地面积很小的Web映射应用程序。




2

派对晚了,但是我想我会添加另一种现在很有意义的选择。

如果您不想托管服务器,但仍然希望从样式和非常快速的切片缓存中受益,那么为什么不使用Google Fusion TablesOpenlayers呢?来自艾伦·格伦(Allan Glenn)的博客

var proj_4326 = new OpenLayers.Projection('EPSG:4326');
var proj_900913 = new OpenLayers.Projection('EPSG:900913');
map = new OpenLayers.Map({
   div: "map",
   projection: proj_900913,
   'displayProjection': proj_4326,
   allOverlays: true
});

var osm = new OpenLayers.Layer.OSM();

var fusionLayer = new OpenLayers.Layer.OSM("Fusion Table       
Map","http://mt0.googleapis.com/mapslt?hl=en- 
US&lyrs=ft:113681&x=${x}&y=${y}&z=${z}&w=256&h=256&source=maps_api");
map.addLayers([osm,fusionLayer]);

var long=12;
var lat=56.5;

var lonlat = new OpenLayers.LonLat(long,lat).transform(map.displayProjection,
map.projection);

map.setCenter(lonlat, 6);

您可以使用gdal加载融合表。这样,您无需为在客户端上解析geojson几何图形付出任何代价。此成本的范围从琐碎的(对于少量功能)到重大的(对于大量功能)。它还将使您的几何形状更加


1

按照@Sean的回答,这是去年10月提出的一个问题和解决方案。我也想要可以传递的东西。至于显示您的区域边界,Fusion Tables可以做到吗?


1

CloudMadeGoogle MapsYahoo! 地图Bing地图。最终,有人会来帮助他们访问他们的网站,并且不会对OpenLayers或GeoJSON有任何了解。使用知名的商业产品将更具前瞻性。他们会更容易找到知道如何使用Google Maps的人,并且界面熟悉。而且,面向公众的网站仍然免费。

确保您获得了他们自己的API密钥。


3
这个问题标记为“开源”,而不是否决票,因为您有权提出商业版本的建议。只是说,使用Google Maps后,您将需要3年的时间来升级代码,这迫使您继续为每个新版本的Google Maps API反复开发相同的APP。使用openlayers开发后,您可以根据需要随意托管该库。您不必担心任何人按下开关都会关闭您的服务。
CaptDragon 2011年

1
我不反对开源。恰恰相反。我可能已经宽泛地解释了“开放”(并且我不认为标签是限制性的)。但是,对于他正在解决的问题领域,与99.9%的非营利性员工可以自行处理的技术上有关OpenLayers,MapServer,GeoServer,OpenStreetMap等的建议在技术上相比要复杂得多。如果他想帮助组织,他应该给他们一些可以修复的东西,或者在他离开后轻松地找人修复。具有Google地图技能的人数要多得多,并且不需要任何组织服务器访问权限。
肖恩

1
是的,我不知道为什么当问询者明确表示他无法托管任何地图服务时,人们为什么会投票建议GeoServer和MapServer的答案。:P
CaptDragon 2011年

@capdragon:答案中也明确指出GeoServer / MapServer和空间数据是可选的。可以在没有它们的情况下继续使用Openlayers。在向用户提供知道它们的答案时,提供额外的相对信息无害……
Senthil

@Senthil:再读一遍,我引用:“这个组织没有/没有设置服务器来托管此地图的图层”。可选甚至不是问题中的一个词。
CaptDragon 2011年

1

值得一看CartoDB:

http://cartodb.com/

它是一种精美的免费网络地图服务,可让您轻松加载和编辑地理数据。我不确定他们是否可以选择将地图设为“私人”地图。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.