- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的 map 包含多个点,可以从用户经过的地方点击用户的位置,但是 the polyline is not shown on the roads, but shows a direct line from one marker to other .我希望我的多段线穿过马路:道路转弯时,它也应该转弯。
这是我的相关代码
dataholder = FirebaseDatabase.getInstance().getReference("UserLocation");
Log.d("onMapReady", "iam here");
dataholder.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d("data",String.valueOf(dataSnapshot.getValue()));
System.out.println(dataSnapshot.getValue());
for (DataSnapshot a : dataSnapshot.getChildren()) {
MapData mapData = a.getValue(MapData.class);
arrayList.add(mapData);
lati.add(arrayList.get(i).getLatituide());
longit.add(arrayList.get(i).getLongitude());
Log.d("mapi","i am in loop");
mMap = googleMap;
Double lat = Double.parseDouble(lati.get(i));
Double longi = Double.parseDouble(longit.get(i));
sydney = new LatLng(longi, lat);
points.add(sydney);
MarkerOptions mop = new MarkerOptions();
mop.position(sydney);
mop.title("check");
mMap.addMarker(mop);
Log.d("latitude", String.valueOf(lat));
Log.d("longitude", String.valueOf(longi));
// Add a marker in Sydney and move the camera
mMap.addMarker(new MarkerOptions().position(sydney).title("check"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
i++;
}
line.addAll(points).width(5).color(Color.RED);
line.geodesic(true);
mMap.addPolyline(line);
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
Toast.makeText(getApplicationContext(),marker.getTitle().toString(),Toast.LENGTH_LONG).show();
return false;
}
});
最佳答案
尝试使用Google Maps Roads API部分 Snap to Road哪个
returns the best-fit road geometry for a given set of GPS coordinates. This service takes up to 100 GPS points collected along a route, and returns a similar set of data with the points snapped to the most likely roads the vehicle was traveling along.
类似于 Google Maps Roads API Snap to Road 示例中的数据:
public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {
private GoogleMap mGoogleMap;
private MapFragment mapFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mapFragment = (MapFragment) getFragmentManager()
.findFragmentById(R.id.map_fragment);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mGoogleMap = googleMap;
List<LatLng> sourcePoints = new ArrayList<>();
sourcePoints.add(new LatLng(-35.27801,149.12958));
sourcePoints.add(new LatLng(-35.28032,149.12907));
sourcePoints.add(new LatLng(-35.28099,149.12929));
sourcePoints.add(new LatLng(-35.28144,149.12984));
sourcePoints.add(new LatLng(-35.28194,149.13003));
sourcePoints.add(new LatLng(-35.28282,149.12956));
sourcePoints.add(new LatLng(-35.28302,149.12881));
sourcePoints.add(new LatLng(-35.28473,149.12836));
PolylineOptions polyLineOptions = new PolylineOptions();
polyLineOptions.addAll(sourcePoints);
polyLineOptions.width(5);
polyLineOptions.color(Color.BLUE);
mGoogleMap.addPolyline(polyLineOptions);
mGoogleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(sourcePoints.get(0), 15));
List<LatLng> snappedPoints = new ArrayList<>();
new GetSnappedPointsAsyncTask().execute(sourcePoints, null, snappedPoints);
}
private String buildRequestUrl(List<LatLng> trackPoints) {
StringBuilder url = new StringBuilder();
url.append("https://roads.googleapis.com/v1/snapToRoads?path=");
for (LatLng trackPoint : trackPoints) {
url.append(String.format("%8.5f", trackPoint.latitude));
url.append(",");
url.append(String.format("%8.5f", trackPoint.longitude));
url.append("|");
}
url.delete(url.length() - 1, url.length());
url.append("&interpolate=true");
url.append(String.format("&key=%s", <your_Google_Maps_API_key>);
return url.toString();
}
private class GetSnappedPointsAsyncTask extends AsyncTask<List<LatLng>, Void, List<LatLng>> {
protected void onPreExecute() {
super.onPreExecute();
}
protected List<LatLng> doInBackground(List<LatLng>... params) {
List<LatLng> snappedPoints = new ArrayList<>();
HttpURLConnection connection = null;
BufferedReader reader = null;
try {
URL url = new URL(buildRequestUrl(params[0]));
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.connect();
InputStream stream = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(stream));
StringBuilder jsonStringBuilder = new StringBuilder();
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = reader.readLine()) != null) {
buffer.append(line+"\n");
jsonStringBuilder.append(line);
jsonStringBuilder.append("\n");
}
JSONObject jsonObject = new JSONObject(jsonStringBuilder.toString());
JSONArray snappedPointsArr = jsonObject.getJSONArray("snappedPoints");
for (int i = 0; i < snappedPointsArr.length(); i++) {
JSONObject snappedPointLocation = ((JSONObject) (snappedPointsArr.get(i))).getJSONObject("location");
double lattitude = snappedPointLocation.getDouble("latitude");
double longitude = snappedPointLocation.getDouble("longitude");
snappedPoints.add(new LatLng(lattitude, longitude));
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return snappedPoints;
}
@Override
protected void onPostExecute(List<LatLng> result) {
super.onPostExecute(result);
PolylineOptions polyLineOptions = new PolylineOptions();
polyLineOptions.addAll(result);
polyLineOptions.width(5);
polyLineOptions.color(Color.RED);
mGoogleMap.addPolyline(polyLineOptions);
LatLngBounds.Builder builder = new LatLngBounds.Builder();
builder.include(result.get(0));
builder.include(result.get(result.size()-1));
LatLngBounds bounds = builder.build();
mGoogleMap.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 10));
}
}
}
并且不要忘记在 Google APIs Console 中为您的项目添加 Google Maps Roads API 支持。 (选择你的项目,然后选择 Dashboard,然后按“+ ENABLE APIS AND SERVICES”按钮,然后在左侧“Filter by”选择“Maps”,然后按“Google Maps Roads API”,最后按“ENABLE”按钮").
你应该得到这样的东西:
其中:蓝色折线 - 用于源点,红色折线 - 用于捕捉点。
请记住,每个用户 (IP) 每天有 100 个 GPS 点和 2500 个请求以及每秒 10 个请求的限制。并且您还需要更优雅的解决方案来下载捕捉点 JSON。
关于java - 折线不在路上 : it goes straight from one point to other,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47329243/
这个问题在这里已经有了答案: CSS different border widths overlapping themselves (2 个答案) 关闭 8 年前。
题目地址:https://leetcode.com/problems/hand-of-straights/description/ 题目描述 Alice has a hand of cards,
我需要从一组给定坐标中找到最接近给定坐标点的坐标 (lat,lon)。类似于这个问题: Find the closest coordinate from a set of coordinates 但是
所以我的教授决定变聪明,为我的扑克项目设计了一手名为 EVEN STRAIGHT 的牌。这就像顺子,只是牌必须是连续的偶数。例如- 8,6,2,4,10 是偶数顺子。此外,一张 A(值为 1)可以用作
放大图像时遇到问题。我有一个如下所示的 png 文件: raw png 图像大小为 8px * 8px,上面有一些红色直线。但是当我用java绘制这个图像并将其放大时,就会发生这种情况:java im
我正在使用名为“Palanquin”的 Google 字体系列。不幸的是,Palanquin 无法呈现直引号(单引号和双引号)。相反,它将所有直引号呈现为结束弯引号。 这意味着如果用户在文本区域中键入
我有一个可以找到类型的线程池 here . 我尝试执行以下操作: /* Allocate a ThreadPool */ shared_ptr pool(new SpinTools::ThreadPo
我正在开发一个应用程序,我有一组轮廓(每个代表一条潜在线),我想检查轮廓/形状的“直度”。我用作引用的文章使用了以下技术: 它匹配一条穿过形状的“分段”线,就像这样- 然后对线的“直”程度进行评分。
我已经搜索了这个问题的答案并尝试了很多建议的解决方案,但似乎都没有用。我一直在为此苦苦挣扎,所以非常感谢任何见解。 我在 JS Canvas 上有 3 个形状(我想是矢量),每个形状的方向表示为偏离
我刚开始学习 Ruby,作为一名 .Net 开发人员,我想知道我是否应该直接使用 IronRuby,而不是先尝试一些纯 Ruby。 你怎么看?我会遗漏什么吗? -- 淫荡的 最佳答案 我会使用纯 ru
本文实例讲述了PHP排序算法之直接插入排序(Straight Insertion Sort)。分享给大家供大家参考,具体如下: 算法引入: 在这里我们依然使用《大话数据结构》里面的一个例子:
我需要画一条直线(出于内容分离的目的),然后在其末端开始一条连接到指定端点的曲线。 我的问题是在完成直线后开始绘制圆弧时发生急转弯。如何消除这个尖 Angular ? 作为一种解决方案,延长直线以平滑
我正在使用 Chart.JS 绘制数据集, 但是我得到了平滑的效果! 这是我得到的曲线: 这是我的代码: function plotChart(data, labels) { var line
使用直接 HTML 页面作为 Spark 模板的最简单方法是什么(IE,我不想通过 TemplateEngine 实现)。 我可以很好地使用模板引擎,就像这样: Spark.get("/test",
所以我正在为即将到来的 CSS 着色器规范开发着色器。我正在构建专门针对专业视频产品的东西,我需要分离出 alpha channel (作为亮度,我已经成功完成)和图像的“直接”版本,它没有 alph
我的 map 包含多个点,可以从用户经过的地方点击用户的位置,但是 the polyline is not shown on the roads, but shows a direct line fr
这是我的问题: 1) 我进行了多元线性回归:假设如下: lm(attitude~quality+price+location+Income) 我主要关心的是态度和素质的关系,其他变量都是控制变量。 2
我正在编写一个 Python 函数,用于识别扑克中的“顺子”。我的代码有效并且会识别顺子,但只给我直子中的数字,而不是花色。此外,其余代码是用卡片的特定格式编写的,即 python 字典格式,因此我需
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 9 年前。 Improve
我正在尝试构建一个自定义 View ,该 View 绘制一 strip 有斜条纹图案的线。它看起来应该类似于: 我认为使用 PathDashPathEffect 应该可以,但是当我将路径形状设置为直线
我是一名优秀的程序员,十分优秀!