지도에서 마커를 표시하려는 프로젝트에서 작업 중입니다.Publications 구독 관찰 Observe
이러한 마커는 뷰포트 제약 조건이있는 서버에서 게시해야합니다. 즉, 현재 사용자 뷰포트 안에있는 마커 만 게시됩니다.
//server
Meteor.publish('posts', function(bottom_left_x, bottom_left_y, upper_right_x, upper_right_y, limit) {
return Posts.find({locs: {$geoWithin: {$box:
[[bottom_left_x, bottom_left_y],
[upper_right_x, upper_right_y]]}}},
{sort: {submitted: -1}, limit: limit});
});
난 항상 내 map_center 변경 가입시를 통해이 함수를 호출 : : 이제 모든 것이 잘 작동
//client
google.maps.event.addListener(map, 'idle', function(event) {
var bounds = map.getBounds();
var ne = bounds.getNorthEast();
var sw = bounds.getSouthWest();
postsHandle= Meteor.subscribe('posts', sw.lat(), sw.lng(), ne.lat(), ne.lng(), 10);
});
까지
간행물은 다음과 같이 보인다. 또한 "posts"에 대한 관찰 함수를 만들었습니다. "added"가 호출되면 마커를 렌더링하고 "removed"가 호출되면 제거합니다. 관찰은 새로운 마커를 렌더링하고 그 문제가 관찰 - 콜백 전체 게시물-컬렉션 트리거이다 오래 된 것
//client
Posts.find().observeChanges({
added: function(post) {
// when 'added' callback fires, add HTML element
var marker = new google.maps.Marker({
position: new google.maps.LatLng(post.locs.lat, post.locs.lng),
postId: post._id,
map: map,
});
},removed .... and so on
을 파괴하는 매우 좋다. 하지만 난 단지 사용자 뷰포트 안에있는 마커를 보여주고 싶습니다. 그게 내가 보통 다음과 같이해야만하는 이유입니다.
//client
Posts.find({locs: {$geoWithin: {$box:
[[bottom_left_x, bottom_left_y],
[upper_right_x, upper_right_y]]}}},
{sort: {submitted: -1}, limit: limit}).observeChanges({
하지만 그건 불가능합니다. GeoWithin은 minimongo에서 지원되지 않으므로 제한이있는 콜렉션을 사용하여 oberserve를 호출 할 수 없습니다.
누구에게이 작업을 수행 할 생각이 있습니까? 아마 minimongo에 대한 쿼리를 사용하지 않고 서브 스크립 션에서 직접지도로 가져 오는 게시물을 푸시 할 수있는 방법이 있습니까?
이 필터링을 서버 측에서 수행하고 클라이언트에서 구독하는 방법은 어떻습니까? 어떻게 든 경계를 보내야 할 것입니다. 음 ... 작동하지 않을 수 있습니다. –
나는 이미 서버 측에 펄스를 가지고 있으며 내 뷰포트가 변경 될 때마다 호출됩니다. 예를 들어 viewport_1에는 3 개의 마커가 있고 viewport_2는 내 posts보다 2 개의 제조사를 제공합니다. 클라이언트 측 콜렉션에는 5 개의 마커가 있습니다. 그게 왜 내가 minimongo 통해 쿼리를 할 필요가있다. 그러나 minimongo는 필요한 매개 변수를 제공하지 않습니다. – chaosbohne