- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为我正在开发的使用Google Map的应用程序寻求建议。
摘要:
用户具有用于搜索满足条件的街道段的条件的列表。街道路段将用3种颜色着色,以显示低于平均水平,平均水平和高于平均水平的部分。然后,用户单击街道路段以查看一个信息窗口,该信息窗口显示该特定路段的属性,直到他/她关闭该窗口并隐藏其他折线后,这些属性才会被隐藏。这看上去就像一个月前的“垄断城市街道”游戏孩之宝(Hasbro)的区别在于我不使用Flash,我不能使用“开放街道地图”,因为它没有列出街道路段(如果是ID,则不会还是一样),而我不必再展示Google草图。
信息:
我有一个具有ID,折线点和质心的路段数据库。
该数据库中有6,000,000个街道段记录。为了稍微缩小生成的数据,我们将重点放在城市上。我们必须显示的最大城市有250,000个街道段。这意味着要显示250,000条线段折线。
我们最长的折线使用9600个字符,这些字符存储在SQL Server 2008中的两个8000 varchar列中。
我们需要使用API v3,因为它比API v2更快,并且该应用程序将移植到iPhone。目前,它是带有SQl Server 2008应用程序的ASP.NET 3.5。
性能是重中之重。
问题:
大多数演示项目都是使用API v2进行的。因此,除了Google API v3参考页上的教程之外,我没有其他东西可以比较实现目标的性能或技术用途。
目前尚无适用于API v3的.NET包装器。
生成250,000条线段折线会创建一个繁重的文件,这需要花费一些时间来传输和解析。 (我发现一条390,000点的折线的demo。我认为编码器的效率会大大降低,而折线越少,折线越多,因为舍入会更少。)
由于街道段是根据条件显示的,因此必须动态创建折线,并且不能使用缓存。
一些想法:
KML / KMZ:
优点:
由于这是一个标准,因此我们可以轻松加载Bing地图,Yahoo!。地图,Google地图,Google Earth和相同的KML文件。数据生成将是相同的。
缺点:
KML中的LineString不能像Google Map API可以处理的那样编码为折线。因此,它可能会更大或更慢地显示。将文件压缩成这样的大小将需要更多的处理时间,并且需要客户端解压缩数据,而对于250,000个数据,我不太确定iPhone将如何处理以及服务器将如何处理40个同时浏览的用户。
JavaScript文件:
优点:
JavaScript文件可以具有encoded polyline,并且将大大减少要传输的文件。
缺点:
必须创建我自己的剥离的API v3版本以添加覆盖,创建折线等。这比仅创建KML文件并指向源代码要复杂得多。
GeoRSS:
我认为此选项不适合我的需求,但我可能会错。
MapServer:
我看到一些建议使用MapServer生成叠加层的帖子。不确定与数据库的连接及其性能。另外,它还需要用于生成KML的插件。在我看来,这比创建自己的KML或JavaScript文件做得更好。没有它,维护会更简单。
垄断城市街道:
游戏现已结束,但是对于那些知道我在说什么“垄断城市街道”的人,它们以最大缩放级别显示的只是质心位于窗口边界内的街道。移动地图是向服务器发送请求以显示新街道。虽然我认为这很巧妙,但是我不知道如何实现类似的功能。我唯一想到的是比较长线是否在地图区域X的边界内并且与Y相同。虽然这可以在高缩放级别上显着提高性能,但是在显示整个城市时什么也没有。
聚类:
虽然聚类对于标记来说很棒,但看来我们无法聚成折线。我本来希望对折线使用MarkerClusterer之类的东西,并且能够通过3种折线颜色进行聚类。这可能会保留下来,因为“本来会吓死人,但算了吧”。
箭头:
在将来的版本中,我将显示折线的方向,并且必须在质心处显示箭头。加载图像或标记只会使我的数据加倍,因此创建自定义叠加层可能是我唯一的选择。我发现demo可以达到类似的效果。不幸的是,演示非常慢,但是我只希望每条折线显示1个箭头,而不是演示中的多个箭头。由于我认为KML不支持自定义叠加层,因此此功能将取决于数据格式。
条件:
当应用程序使用ASP.NET 3.5完成时,iPhone的端口将不会使用Web来显示应用程序,并且在选择标准时屏幕尺寸受到限制。这就是为什么我更着重于基于根据参数传递的标准生成文件的服务或页面的原因。该服务将生成我需要在地图上显示折线的文件。我也可以创建一个执行此操作的aspx页面。 aspx页面比服务方式更具文档化。应该是有原因的。
问题:
我应该创建一个Web服务来返回街道路段文件还是创建一个返回该文件的aspx页面?
我应该基于最大经度/纬度折线包含9600个字符的事实创建带有编码折线的JavaScript文件,还是创建具有经度/纬度的KML的JavaScript文件,并且必须渲染最多250,000个线段折线。还是应该使用生成叠加层的MapServer?
我可以在下一个版本的折线上显示简单箭头吗?
在生成KML的情况下,使用XDocument
,XmlDocument,XmlWriter
手动创建文件或仅序列化流中的街道段是否更快?
与实际的代码问题相比,这更是集思广益的堆栈溢出问题。任何有助于缩小可能性的答案都和拥有所有知识的人指出我的更好选择一样好。
最佳答案
大量的短GPolyline的运行速度大大慢于少量的长GPolyline。
Google Maps v2和Google Maps v3之间的速度差异不会太大,因为大多数CPU时间将由浏览器的实际图形系统占用。 Google Maps使用VML,SVG或Canvas图形系统,具体取决于浏览器。其中,VML迄今为止是最慢的,并且只要浏览器是MSIE就会被使用。
在着手处理250,000条线段之前,建议您先看一下quick speed test of 200 random polylines。尝试在MSIE中缩放和平移该地图。
然后,还要考虑需要从服务器发送到客户端以指定250,000行段的数据量。数据量会有所不同,具体取决于您选择的是KML还是JSON或GeoRSS,但是如果最终每行段有20个字节,那么在提取1兆宽的宽带连接时将花费50秒。考虑您的用户是否准备好坐50秒钟。
真正有意义的唯一解决方案是执行Google对其流量叠加的操作,将线绘制到服务器中的图块上,并使这些图块在客户端中显示为GTileLayerOverlay。
您需要的是一个具有空间意识的数据库,以及一个服务器端图形库,例如gd或ImageMagik。客户端要求从服务器获得图块。如果缩放比例在某个级别以上,则服务器会在数据库中扫描具有边界框的线段,这些边界框与请求的图块的边界框重叠,并使用图形库进行绘制。
缩放级别限制可以限制数据库和服务器需要完成的工作量。您不希望最终在单个缩小的图块上绘制250,000个线段,因为这对服务器来说是非常艰巨的工作,并且对用户而言意义不大。
关于点击处理:
要做的一件简单的事就是侦听地图(而不是对象)上的点击,并将点击详细信息发送到服务器。然后,服务器使用单击位置搜索空间感知的数据库,如果存在,则返回单击对象的详细信息。客户端代码执行以下操作:
GEvent.addListener(map,"click",function(overlay,point) {
var url="clickserver.php?lat=" + point.lat() + "&lng=" +point.lng();
GDownloadUrl(url, function(html) {
if (html.length) {
map.openInfoWindow(html)
}
});
});
关于asp.net - 在必须显示25万条折线的Google Map应用程序上需要指导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1888539/
我的Angular-Component位于一个flexbox(id =“log”)中。可以显示或隐藏flexbox。 我的组件内部有一个可滚动区域,用于显示日志消息。 (id =“message-li
我真的很困惑 有一个 phpinfo() 输出: MySQL 支持 启用 客户端 API 版本 5.5.40 MYSQL_MODULE_TYPE 外部 phpMyAdmin 显示: 服务器类型:Mar
我正在研究这个 fiddle : http://jsfiddle.net/cED6c/7/我想让按钮文本在单击时发生变化,我尝试使用以下代码: 但是,它不起作用。我应该如何实现这个?任何帮助都会很棒
我应该在“dogs_cats”中保存表“dogs”和“cats”各自的ID,当看到数据时显示狗和猫的名字。 我有这三个表: CREATE TABLE IF NOT EXISTS cats ( id
我有一个字符串返回到我的 View 之一,如下所示: $text = 'Lorem ipsum dolor ' 我正在尝试用 Blade 显示它: {{$text}} 但是,输出是原始字符串而不是渲染
我无法让我的链接(由图像表示,位于页面左侧)真正有效地显示一个 div(包含一个句子,位于中间)/单击链接时隐藏。 这是我的代码: Practice
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
最初我使用 Listview 来显示 oracle 结果,但是最近我不得不切换到 datagridview 来处理比 Listview 允许的更多的结果。然而,自从切换到数据网格后,我得到的结果越来越
我一直在尝试插入一个 Unicode 字符 ∇ 或 ▽,所以它显示在 Apache FOP 生成的 PDF 中。 这是我到目前为止所做的: 根据这个基本帮助 Apache XSL-FO Input,您
我正在使用 node v0.12.7 编写一个 nodeJS 应用程序。 我正在使用 pm2 v0.14.7 运行我的 nodejs 应用程序。 我的应用程序似乎有内存泄漏,因为它从我启动时的大约 1
好的,所以我有一些 jQuery 代码,如果从下拉菜单中选择了带有前缀 Blue 的项目,它会显示一个输入框。 代码: $(function() { $('#text1').hide();
当我试图检查 Chrome 中的 html 元素时,它显示的是 LESS 文件,而 Firefox 显示的是 CSS 文件。 (我正在使用 Bootstrap 框架) 如何在 Chrome 中查看 c
我是 Microsoft Bot Framework 的新手,我正在通过 youtube 视频 https://youtu.be/ynG6Muox81o 学习它并在 Ubuntu 上使用 python
我正在尝试转换从 mssql 生成的文件到 utf-8。当我打开他的输出 mssql在 Windows Server 2003 中使用 notepad++ 将文件识别为 UCS-2LE我使用 file
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我正在尝试执行单击以打开/关闭一个 div 的功能。 这是基本的,但是,点击只显示 div,当我点击“关闭”时,没有任何反应。 $(".inscricao-email").click(function
假设我有 2 张卡片,屏幕上一次显示一张。我有一个按钮可以用其他卡片替换当前卡片。现在假设卡 1 上有一些数据,卡 2 上有一些数据,我不想破坏它们每个上的数据,或者我不想再次重建它们中的任何一个。
我正在使用 Eloquent Javascript 学习 Javascript。 我在 Firefox 控制台上编写了以下代码,但它返回:“ReferenceError:show() 未定义”为什么?
我正在使用 Symfony2 开发一个 web 项目,我使用 Sonata Admin 作为管理面板,一切正常,但我想要做的是,在 Sonata Admin 的仪表板菜单上,我需要显示隐藏一些菜单取决
我试图显示一个div,具体取决于从下拉列表中选择的内容。例如,如果用户从列表中选择“现金”显示现金div或用户从列表中选择“检查”显示现金div 我整理了样本,但样本不完整,需要接线 http://j
我是一名优秀的程序员,十分优秀!