标签: openlayers

如何在geodjango中使用OpenStreetMap的openlayers显示数据?

我已经使用openlayersOpenStreetMaps运行管理应用程序运行geodjango .

现在我想写一些视图来显示数据.基本上,我只想在地图中添加一个点列表(在管理员中看到).

Geodjango似乎使用了一个特殊的 openlayers.js文件来管理它.有没有一种很好的方式与此接口?

如何编写视图/模板以在打开的街道地图窗口中显示geodjango数据,如管理员所示?

目前,我正在挖掘openlayers.js文件和api寻找一个"简单"的解决方案.(我没有经验,所以这需要一些时间.)

我可以看到的当前方式是将以下内容添加为模板,并使用django添加显示点所需的代码.(根据这里的例子)

<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Draw Feature Example</title>

        <script src="http://www.openlayers.org/api/OpenLayers.js"></script>
      <script type="text/javascript">
            var map;

            function init(){
                map = new OpenLayers.Map('map');
                var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
                        "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
                map.addLayer(layer);

                /*
                 * Layer style
                 */
                // we want opaque external graphics and non-opaque internal graphics
                var layer_style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
                layer_style.fillOpacity = 0.2;
                layer_style.graphicOpacity = 1;

                /*
                 * Blue style
                 */
                var …
Run Code Online (Sandbox Code Playgroud)

python mapping geodjango openlayers

12
推荐指数
2
解决办法
2万
查看次数

像OpenStreetMap一样显示地图

我喜欢OpenStreetMap显示地图的方式.它几乎看起来像谷歌地图.我已经在笔记本上安装了GeoServer和PostGis.我还为我的国家印度尼西亚提供了这个cloudmade osm文件.我下载了indonesia.osm.bz2.

我成功地将它导入我的PostGis并在我的GeoServer上设置了它,但它没有像OpenStreetMap那样显示地图.我选择了planet_osm_polygon作为GeoServer中的图层.最后,我用openlayers显示了这个. 替代文字http://deerawan.com/blogimages/map_polygon.jpg

但我希望像这样一个 alt文本http://deerawan.com/blogimages/map-indo.png

我从Cloudmade使用的OSM文件是错误的吗?

谢谢您的帮助.

postgis geoserver openlayers openstreetmap

12
推荐指数
2
解决办法
1万
查看次数

使用OpenLayers动态添加自定义标记以进行映射

我想让用户在地图上添加自定义标记,并附上每个标记的说明.任何提示,指向任何教程的链接都非常有用.

openlayers

12
推荐指数
2
解决办法
3万
查看次数

强制OpenLayers Markers图层在顶部绘制,并在下面有可选择的图层

我有一个OpenLayers地图,它有一个光栅基础层,一个矢量图层和一个标记图层.它们以正确的顺序显示,矢量顶部的标记非常好.

但是当我添加一个SelectFeature控件并将其指向矢量图层时,它会突然在标记图层上方绘制,尽管所有努力都会提升标记图层或设置Z索引.似乎SelectFeature控件会覆盖所有绘图顺序设置.这是设计,还是我能以某种方式克服这个问题?

图层定义:

var baselayer = new OpenLayers.Layer.WMS('Norden', 
'http://{myarcgisserver}/ArcGIS/services/mylayer/MapServer/WMSServer', {
    layers :'1,2',
    transparent :false,
    width :'auto',
    height :'auto',
    filter :null
}, {
    isBaseLayer: true,
    singleTile :true,
    ratio :1,
    alpha :false,
    transitionEffect :'resize'
});

var vectorLayer = new OpenLayers.Layer.Vector("Work orders", {
    projection: new OpenLayers.Projection("EPSG:2400"),
    strategies: [new OpenLayers.Strategy.Fixed(), refresh],
    protocol: new OpenLayers.Protocol.HTTP({
        url: "/WorkOrder/WorkOrders.ashx?output=geojson",
        format: new OpenLayers.Format.GeoJSON()
    })
});

var markerlayer = new OpenLayers.Layer.Markers("Markers", {
    projection: new OpenLayers.Projection("EPSG:2400"),
    displayInLayerSwitcher: false
}
);
Run Code Online (Sandbox Code Playgroud)

控件定义:

var selectctrl = new OpenLayers.Control.SelectFeature(
    vectorLayer,
    {
        clickout: true, …
Run Code Online (Sandbox Code Playgroud)

javascript openlayers

12
推荐指数
1
解决办法
1万
查看次数

我如何获得OpenLayers功能选择和Javascript拖放一起工作?

我正在编写一个使用OpenLayers的应用程序,使用户能够将文件拖放到一组预定义的功能,这些功能将通过AJAX发送到服务器.文件本身是来自地球物理设备的原始数据,将由服务器呈现为栅格图层.

我为地图拖放工作:

var mapelem = $id("map");
mapelem.addEventListener("dragover", FileDragHover, false);
mapelem.addEventListener("dragleave", FileDragHover, false);
mapelem.addEventListener("drop", FileSelectHandler, false);
Run Code Online (Sandbox Code Playgroud)

我强调悬停使用此代码:

var sf = new OpenLayers.Control.SelectFeature(boxes, {
    hover: true,
    multiple: false,
    highlightOnly: true
});
map.addControl(sf);
sf.activate();
Run Code Online (Sandbox Code Playgroud)

其余代码主要是Boxes Example - Vector.

问题是当将文件拖到地图画布上时,OpenLayers悬停选择不再有效,我希望它给用户提供反馈,以确保他们将文件丢弃到他们期望的位置.

我可以在画布上获取光标的位置:

map.events.register("mousemove", map, function(e) { 
    lonlat = map.getLonLatFromPixel(e.xy);
});
Run Code Online (Sandbox Code Playgroud)

所以我可以在该函数中进行一个功能点测试,但能够使用现有的功能会很好.

有什么方法可以将拖动消息传播到我的OpenLayers层吗?

javascript drag-and-drop openlayers

12
推荐指数
1
解决办法
1515
查看次数

Google的抓取工具无法理解自己的地图.如何解决?

我发现了一些奇怪的单词,(有,在这里,图像,对不起),这些单词应该不在我的网站上,被Google的抓取工具当作关键字

第一个网站

在抓取使用Google地图的网页时,Google似乎遇到了错误,因此将错误字符串视为优秀的关键字!

我正在使用openlayers在两个站点中显示地图.代码是这样的

<script src="http://openlayers.org/api/OpenLayers.js"></script>
<script src="http://maps.google.com/maps/api/js?v=3&amp;sensor=false"></script>
<script type="text/javascript">
$(function() {
  $("#mapOuter").html('<div class="thumbnail"><div id="map" style="height:250px"></div></div>')
  map = new OpenLayers.Map("map")
  //map.addLayer( new OpenLayers.Layer.OSM   ("OpenStreeetMap") )
  map.addLayer( new OpenLayers.Layer.Google("Google v3"     ) )
  vectors = new OpenLayers.Layer.Vector("vector")
  map.addLayer( vectors )

  map.addControl( new OpenLayers.Control.LayerSwitcher() );
  map.addControl( new OpenLayers.Control.Navigation({documentDrag:true}) );
  map.addControl( new OpenLayers.Control.PanZoom() );
  var in_options = {
      'internalProjection': map.baseLayer.projection,
      'externalProjection': new OpenLayers.Projection("EPSG:4326")
  };

    var lon=-57.954900
    var lat=-34.917000

  map.setCenter(new OpenLayers.LonLat(lon, lat) // Center of the map
    .transform(
      new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
      new …
Run Code Online (Sandbox Code Playgroud)

javascript seo google-maps openlayers

12
推荐指数
1
解决办法
2252
查看次数

升级到Google地图版本3,还是转到OpenLayers?

我负责管理一些用于创作地理数据集的学术网络地图软件的开发.这是一个用于创建历史地图的相当简单的界面.该项目基于谷歌地图v.2,并且因为v.2将在2013年停止,我们认为我们会提前咬紧并升级到第3版.

事实证明,这是一项重要的工作,需要完全重新思考我们的应用程序的地图部分是如何工作的.我们必须重写所有自定义Gmap控件,重组应用程序的几个部分以及一些其他重大更改 - 例如,v.3不与Google Earth以及v.2集成,我们使用Google Earth很多.正因为如此,并且因为我们开始使用Gmap本身不支持的更多功能(如WMS地图),我一直想知道是否值得从Gmap切换到OpenLayers.据我所知,OpenLayers拥有Google Maps的所有功能,对WMS提供原生支持并支持更多数据格式,让我们无论如何都可以使用所有Google图像,并与KML配合使用.

我对社区的问题是对于了解OpenLayers和Google Maps的人:您能否让我了解从Gmap v.2升级到v.3的工作负载与从Gmap v.2到OpenLayers的完整端口的比较?我们应该注意哪些其他缺点?

我们最担心的问题之一是:我们经常使用Google地球.如果我们去OpenLayers,我们必须自己同步Earth和OpenLayers,但听起来这就是我们在Gmap v.3中必须做的事情.据我所知,OpenLayers没有对Google Earth或任何类型的3D geobrowser的原生支持,但有一些项目(如此)试图缩小差距.这会引起多大的麻烦?

google-maps openlayers

11
推荐指数
1
解决办法
1623
查看次数

Openlayers:矢量特征而不是标记

我想在地图上放置一个符号.例如

地图示例

到目前为止,我已经使用OpenLayers OpenLayers.Layer.Markers.代码如下所示:

    map = new OpenLayers.Map('map');
    layer = new OpenLayers.Layer.OSM( "Simple OSM Map");
    map.addLayer(layer);
    map.setCenter(
        new OpenLayers.LonLat({{ location.lon }}, {{ location.lat }}).transform(
            new OpenLayers.Projection("EPSG:4326"),
            map.getProjectionObject()
        ), 15);

   var lonLat = new OpenLayers.LonLat({{ location.lon }}, {{ location.lat }})
             .transform(
               new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
               map.getProjectionObject() // to Spherical Mercator Projection
             );
   var markers = new OpenLayers.Layer.Markers( "Markers" );
   map.addLayer(markers);
   markers.addMarker(new OpenLayers.Marker(lonLat));
Run Code Online (Sandbox Code Playgroud)

这可以作为例外,并显示上面的地图.但我无法使用Vector替换最后3行:

     vectors = new OpenLayers.Layer.Vector("Vector Layer");
     vectors.addFeatures([new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(lonLat))]);
     map.addLayer(vectors);
Run Code Online (Sandbox Code Playgroud)

是否需要使用特殊魔法OpenLayers.Feature.Vector

openlayers

11
推荐指数
1
解决办法
2万
查看次数

有没有办法在OpenLayers 3中禁用旋转?

我目前正将OpenLayers 2 Mapview升级到OpenLayers 3.我非常喜欢新的OpenLayers客户端,但我想停用在移动设备上旋转地图的功能(用2个手指旋转).

但我找不到任何设置.这是不可能的,还是我只是愚蠢地找到设置?

我正在使用openlayers javascript客户端的当前发行版本(3.0.0).(https://github.com/openlayers/ol3/releases/tag/v3.0.0)

javascript openlayers openlayers-3

11
推荐指数
2
解决办法
7427
查看次数

在Redux架构中集成React和OpenLayers

我们目前正在为我们公司开发一个新的网络地图解决方案.到目前为止,我们决定使用React和构建应用程序OpenLayers 4.由于我们希望将Redux模式用于我们的体系结构,因此将有一个redux存储保存应用程序状态.

我们在这个堆栈中遇到的问题如下:
map是我们应用程序中的中心元素,它的实例需要传递给许多不同的组件.例如,用于在地图上绘制要素的工具需要对map实例的引用,以便它可以将其自身添加为交互工具.
我们讨论了如何构建我们的应用程序以最可靠的方式集成OpenLayers,React最终得到两种不同的方法:

  1. 我们讨论的第一种方法是在应用程序范围的redux存储中保存对map对象的引用,这样它就可以通过@connect注释函数传递给任何组件react-redux.虽然这个解决方案提供了一个简单的访问,map我们想知道这是否是一个易处理的方法,因为存储应保持最小,并且map对象永远不会在应用程序的整个生命周期中发生变化.

  2. 第二种方法将渲染组件(如上面提到的绘制交互)视为反应图组件的子组件.map然后,可以直接将实例作为a prop或通过利用模式利用反应context对象传递给地图组件的子项Provider.
    但是,反应文档明确建议不要使用context,尽管我们发现了许多使用这种模式的解决方案(react-geo,react-leaflet)以及流行的库,比如react-redux使用它.
    因此,我们考虑使用React.Children.map()克隆子组件,然后将map其添加为prop.

我希望我们面临的问题足够清楚.我们不知道在react最佳实践方面哪种方式更好.

什么架构更适合设计/管理和应用的"反应方式"?为什么?

javascript openlayers reactjs redux react-redux

11
推荐指数
1
解决办法
563
查看次数